nginx

nginx (读作 [engine x]是 HTTP 服务器, 也是多种代理(reverse proxy, mail, TCP等) 服务器。) 作者是 Igor Sysoev, 一位俄罗斯人。最初 nginx 被广泛用于俄罗斯的各种大型网站。截止 到2016年1月,16%的网站使用nginx. (另外几个大户分别是 Apache: 34%, Microsoft IIS: 29%, nginx: 16%, 其他: 20%)

在国内,几乎所有的公司都在用nginx. 百度阿里腾讯优酷都是这样。

官方网站:http://nginx.org

在本章, "HTTP服务器"也被简称为“服务器”或者“server“, 截止2016年2月,最新版本是1.9.11.

与其他HTTP 服务器的对比

IIS 是C#系列的服务器。不能运行在Linux上,所以我们不考虑它,只考虑Apache.

Apache: Linux上最古老的HTTP 服务器,诞生于1995年。目前也是Linux上用的最广泛的服务器。 它是开源的,Apache module 也是开源的。例如 mod_php(php的module) , mod_jk(java + tomcat的module)

但是Apache的缺点:大并发访问下,性能会下降的厉害。

  • Apache中,每个http request, 都会消耗apache的进程。并发数越大,apache的负担就越重, 最终apache是有一个处理并发请求的上限的。
  • nginx则使用了固定的内存数,事件驱动。一般情况下,不需要多少配置就能很好的工作。

所以,我们用nginx的原因是:

  • 速度快, 处理静态内容的速度是apache的4倍。
  • 消耗内存,CPU少。
  • 还有第三点:配置简单。

引用nginx官方网站的文章: :

nginx Apache
消耗的CPU 15% 30%
消耗的内存 1MB 17MB
每秒并发 11,500 6,500

nginx的配置比apache的容易很多。 apache的代码风格明显是对机器友好。 而nginx则对人友好, 下面是apache 配置一个server的例子, 把 /my/html_files 作为根目录,本地运行个server, 跑在80端口:

Ubuntu下,Apache的配置步骤:

  • 新建站点的配置文件: /etc/apache2/sites-enabled/my_site.conf
    <VirtualHost *:80>
      ServerName localhost
      DocumentRoot "/my/html_files"
    </VirtualHost>
    
  • 新建对端口的监听文件: /etc/apache2/ports.conf
    NameVirtualHost *:80
    Listen 80
    

在Ubuntu下,nginx的配置步骤:

  • 新建站点的配置文件: /etc/nginx/sites-enabled/my_site.conf
    server {
      listen 80;
      server_name localhost;
      root "/my/html_files";
    }
    

可以看出, apache中对80端口的监听文件,完全就没有必要存在。 这种叫做“废代码(boilerplate code)”, 在apache中,同样的“废代码”随处可见。

nginx的废代码更少,表达更加直观,这也是我们使用nginx的原因之一。